package cn.cdeden.knowledge.controller.template;

import cn.cdeden.common.core.domain.R;
import cn.cdeden.common.core.utils.page.TableDataInfo;
import cn.cdeden.knowledge.domain.FileTemplateTree;
import cn.cdeden.knowledge.domain.Template;
import cn.cdeden.knowledge.domain.dto.FileTemplateTreeDto;
import cn.cdeden.knowledge.domain.dto.TemplateTreeQueryParam;
import cn.cdeden.knowledge.enums.TreeEnum;
import cn.cdeden.knowledge.service.FileTemplateTreeService;
import io.undertow.util.BadRequestException;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.web.PageableDefault;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.util.List;

/**
 * 文件模版管理
 */
@RestController
@RequiredArgsConstructor
//@Api(tags = "模板树管理")
@RequestMapping("/api/templateTree")
//@PermissionAccess(value = "template:list")
public class TemplateTreeController {

    private final FileTemplateTreeService fileTemplateTreeService;

    /**
     * 查询模板
     * @param queryParam
     * @param pageable
     * @return
     */
    @GetMapping("/queryTemplate")
//    @ApiOperation("查询模板模板")
    public R createTemplateCenter(TemplateTreeQueryParam queryParam,
                                  Pageable pageable){

        return R.ok(fileTemplateTreeService.queryTemplate(queryParam, pageable));
//        PageInfo<Template> pageInfo = enterpriseTemplateTreeService.queryTemplate(queryParam, pageable);
//        return BaseRespResult.successResult(pageInfo);
    }


    /**
     * 查询热门名称
     * @param size
     * @return
     */
    @GetMapping("/queryHotName")
//    @ApiOperation("查询热门名称")
    public R queryHotName(Integer size){
        return R.ok(fileTemplateTreeService.queryHotName(size));
//        return BaseRespResult.successResult(enterpriseTemplateTreeService.queryHotName(size));
    }


    /**
     * 查询收藏模板
     * @param queryParam
     * @param pageable
     * @return
     */
    @GetMapping("/queryCollectionTemplate")
//    @ApiOperation("查询收藏模板")
    public R queryCollectionTemplate(TemplateTreeQueryParam queryParam,
                                                  Pageable pageable){
        TableDataInfo<Template> pageInfo = fileTemplateTreeService.queryCollectionTemplate(queryParam, pageable);
        return R.ok(pageInfo);
//        return BaseRespResult.successResult(pageInfo);
    }

    /**
     * 查询模版原文件
     * @param treeNodeIds
     * @return
     */
    @GetMapping("/getTemplateFile")
    public R getTemplateFile (List<Long> treeNodeIds) {
        return R.ok(fileTemplateTreeService.getTemplateFile(treeNodeIds));
    }

    /**
     * 个人模版上传到公共库
     * @param fileTemplateTree
     * @return
     */
    @PostMapping("/upload/template/to/common")
    public R uploadTemplateToCommon (@RequestBody FileTemplateTree fileTemplateTree) {
        fileTemplateTreeService.uploadTemplateToCommon(fileTemplateTree);
        return R.ok();
    }

    /**
     * 是否添加收藏
     * @param templateId
     * @param isAdd
     * @return
     */
    @GetMapping("/addCollection")
    public R isAddCollection(@RequestParam Long templateId,@RequestParam Boolean isAdd){
        fileTemplateTreeService.isAddCollection(templateId,isAdd);
        return R.ok();
    }


    /**
     * 删除个人模板
     */
    @PostMapping("/removePersonalTemplate")
    public R removePersonalTemplate(@RequestBody FileTemplateTreeDto enterpriseTemplateTreeDto) throws BadRequestException {
        fileTemplateTreeService.removePersonalTemplate(enterpriseTemplateTreeDto.getId());
        return R.ok();
    }

    /**
     * 个人文档文件上传到个人模版库
     * @param fileTemplateTree
     * @return
     */
    @PostMapping("/upload/personal/template")
    public R uploadPersonalTemplate(@RequestBody FileTemplateTree fileTemplateTree) {
        fileTemplateTreeService.uploadPersonalTemplate(fileTemplateTree);
        return R.ok();
    }

    /**
     * 个人文档上传到公共库
     * @param fileTemplateTree
     * @return
     */
    @PostMapping("upload/personal/template/to/common")
    public R uploadPersonalTemplateToCommon(@RequestBody FileTemplateTree fileTemplateTree) {
        fileTemplateTreeService.uploadPersonalTemplateToCommon(fileTemplateTree);
        return R.ok();
    }

    /**
     * 企业文档上传到个人模版库
     * @param fileTemplateTree
     * @return
     */
    @PostMapping("/upload/enterprise/template")
    public R uploadEnterpriseTemplate(@RequestBody FileTemplateTree fileTemplateTree) {
        fileTemplateTreeService.uploadEnterpriseTemplate(fileTemplateTree);
        return R.ok();
    }

    /**
     * 企业文档上传到公共模版库
     * @param fileTemplateTree
     * @return
     */
    @PostMapping("/upload/enterprise/template/to/common")
    public R uploadEnterpriseTemplateToCommon(@RequestBody FileTemplateTree fileTemplateTree) {
        fileTemplateTreeService.uploadEnterpriseTemplateToCommon(fileTemplateTree);
        return R.ok();
    }

    /**
     * 使用模版创建文件
     * @param fileTemplateTreeDto
     * @return
     */
    @PostMapping("/use/template")
    public R useTemplate(@RequestBody FileTemplateTreeDto fileTemplateTreeDto) throws IOException {
        return R.ok(fileTemplateTreeService.useTemplate(fileTemplateTreeDto));
    }


/*
    */
/**
     * 更新模板信息
     */

    @PostMapping("/updateTemplate")
    public R updateTemplate(@ModelAttribute FileTemplateTreeDto enterpriseTemplateTreeDto){
        fileTemplateTreeService.updateTemplate(enterpriseTemplateTreeDto.getId(), Long.valueOf(enterpriseTemplateTreeDto.getParentId()), enterpriseTemplateTreeDto.getDeptId(), enterpriseTemplateTreeDto.getRealName(), enterpriseTemplateTreeDto.getFile(), enterpriseTemplateTreeDto.getImage());
        return R.ok();
    }

/**
     * 后台上传模版
     * @param enterpriseTemplateTreeDto
     * @return
     */

    @PostMapping("/createTemplate")
    public R uploadTemplateAdmin(@ModelAttribute FileTemplateTreeDto enterpriseTemplateTreeDto){
        fileTemplateTreeService.uploadTemplateAdmin(Long.valueOf(enterpriseTemplateTreeDto.getParentId()), enterpriseTemplateTreeDto.getDeptId(), enterpriseTemplateTreeDto.getRealName(), enterpriseTemplateTreeDto.getFile(), enterpriseTemplateTreeDto.getImage());
        return R.ok();
    }

/**
     * 保存为模板
     * @param enterpriseTemplateTreeDto
     * @return
     */

    @PostMapping("/createTemplateCenter")
    public R createTemplateCenter(@RequestBody FileTemplateTreeDto enterpriseTemplateTreeDto ){
        return R.ok(fileTemplateTreeService.createTemplateCenter(enterpriseTemplateTreeDto.getId(), enterpriseTemplateTreeDto.getRealName(),enterpriseTemplateTreeDto.getType(),enterpriseTemplateTreeDto.getState(),enterpriseTemplateTreeDto.getParentId()));
    }


    /**
     * 批量上传
     * @param enterpriseTemplateTreeDto
     * @return
     */
    @PostMapping("/batchUpload")
    public R batchUpload(@ModelAttribute FileTemplateTreeDto enterpriseTemplateTreeDto){
        fileTemplateTreeService.uploadTemplateAdmin(Long.valueOf(enterpriseTemplateTreeDto.getParentId()),enterpriseTemplateTreeDto.getFiles(),enterpriseTemplateTreeDto.getDeptId());
        return R.ok();
    }

    /**
     * 后台查询模板文件
     */
    @GetMapping("/adminQueryTemplate")
    public R adminQueryTemplate(String type,String realName,Long parentId,@PageableDefault(sort = {"create_time"},direction = Sort.Direction.DESC) Pageable pageable){
        return R.ok(fileTemplateTreeService.queryEnterpriseTemplate(type,realName,parentId,pageable));
    }

    /**
     * 删除模板通过模板id
     * @param id    模板id
     * @return
     */
    @GetMapping("/deleteTemplateById")
    public R deleteTemplateById(Long id){
        fileTemplateTreeService.removeEnterpriseTemplate(id);
        return R.ok();
    }

    @PostMapping("/createTemplatePersonal")
//    @ApiOperation("上传个人模板")
    public R createTemplatePersonal(@ModelAttribute FileTemplateTreeDto enterpriseTemplateTreeDto){
        fileTemplateTreeService.createTemplate(enterpriseTemplateTreeDto.getImage(),enterpriseTemplateTreeDto.getFile(), enterpriseTemplateTreeDto.getRealName(),null, TreeEnum.PERSONAL.getType());
        return R.ok();
    }
}
